//
//  PKProductsMainViewController.m
//  PianKe
//
//  Created by lanou on 15/12/21.
//  Copyright © 2015年 KFC. All rights reserved.
//

#import "PKProductsMainViewController.h"
#import "PKProductsTableViewCell.h"

@interface PKProductsMainViewController () <UITableViewDataSource,UITableViewDelegate>

// 展示列表的表示图
@property (retain, nonatomic) UITableView *listTableView;
// 给表示图提供数据的数组
@property (retain, nonatomic) NSMutableArray *dataArray;

// 声明一个上啦加载的属性
@property (assign, nonatomic) NSInteger requestStart;

@property (nonatomic, strong) FMDatabase *db; // FMDB里面的数据库,一个db就是一个数据库,每个数据库里可以放很多张表

@end

@implementation PKProductsMainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor blueColor];
    
    
    _dataArray = [NSMutableArray array];
    
    // 先初始化为0
    _requestStart = 0;
    
    
    [self addTableview];
    
    [self setUpData];
    
#pragma mark ----- 1.创建数据库
    // 先获取docunment的路径  // 再拼接要保存的路径
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"PKDataBase.db"];

    
    // 根据路径去创建一个数据库
    _db = [FMDatabase databaseWithPath:path];
    
    NSLog(@"%@",path);
 
    
#pragma mark ----- 2.打开数据库
    // 打开数据库
    if ([_db open] == YES) {
        NSLog(@"数据库打开成功");
    } else {
        NSLog(@"数据库打开失败");
    }
    
#pragma mark ----- 3.创建表
    // 调用executeUpdate,这个方法的参数就是sql语句
    [_db executeUpdate:@"create table IF NOT EXISTS ProductList (buyurl text,contentid text,coverimg text,title text)"];
    
#pragma mark ----- 4.先把之前数据库里的表的数据 取出来 存进 数据源数组里
    // 执行查找的操作,调用的方法是executeQuery,参数是sql的查找语句,会返回一个FMResultSet类型的结果
    FMResultSet *result = [_db executeQuery:@"select * from ProductList"];
    while ([result next]) {
        
        NSString *buyurl = [result stringForColumn:@"buyurl"];
        NSString *contentid = [result stringForColumn:@"contentid"];
        NSString *coverimg = [result stringForColumn:@"coverimg"];
        NSString *title = [result stringForColumn:@"title"];
        // 如果是int类型的,用intForColumn
        PKProductModel *model = [[PKProductModel alloc] init];
        model.buyurl = buyurl;
        model.contentid = contentid;
        model.coverimg = coverimg;
        model.title = title;
        [_dataArray addObject:model];
    }
    
#pragma mark ------ 下拉刷新:
    _listTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 进入刷新状态后会自动调用这个block
        
        // 下拉刷新的时候,把请求初始位置设置为0,不然看不到最新的动态
         _requestStart = 0;
        
        // 清空数组,不能放在这里,这时因为,如果网速不好,会导致清空了数组,导致tableView无法显示行数,一划动tableVeiw就会崩溃
        
        
#pragma mark ------ 重新请求数据
        [self setUpData];
        
    }];
    
   
#pragma mark ------ 上拉加载:
 _listTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        // 进入刷新状态后会自动调用这个block
     
     
     // 修改请求的初始位置
     _requestStart = _requestStart + 10;
     
     [self setUpData];
     
     
    }];
    
    
}

// 解析数据
- (void)setUpData
{
    
    
    // 利用 封装的网络请求的方法
    NSMutableDictionary *parDic = [NSMutableDictionary dictionary];
    parDic[@"auth"] = @"CMBvEXi1pvhDCsN9GMPukDJxQMSsMm2KLp2lkWjc2cWP22N1OSxte7vs";
    parDic[@"client"] = @"1";
    parDic[@"deviceid"] = @"F7EFB566-54F1-4912-ADFC-7E788F6D4D00";
    parDic[@"limit"] = @"10";
    parDic[@"start"] = [NSString stringWithFormat:@"%ld",_requestStart];
    parDic[@"version"] = @"3.0.6";
    
    [PKRequestManager requestWithUrlString:@"http://api2.pianke.me/pub/shop" parDic:parDic Method:POST finish:^(NSData *data) {
        
         // json解析
         NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
        
        // 获取data对应呀的字典
        NSDictionary *dataDic = dic[@"data"];
        
        // 再获取list对应的数组
        NSArray *array = dataDic[@"list"];
        
#pragma mark ----- 4.先把数据库里的数据删除掉,这样每次只保存一次的数据
        [_db executeUpdate:@"delete from ProductList"];
        
        //  上啦刷新的时候, 有了 新数据要把老数据清空,否则会造成数据重复
        if (_requestStart == 0) {
            
            [_dataArray removeAllObjects];
        }
        
        
        
        for (NSDictionary *oneDic in array) {
        
            PKProductModel *model = [[PKProductModel alloc] init];
            [model setValuesForKeysWithDictionary:oneDic];
        
            [self.dataArray addObject:model];
        
#pragma mark ----- 5.往表里插入数据
            // FMDB插入的时候必须是一个对象,如果表里面的一个字段是int类型,插入的时候需要插入一个NSNumber对象
            // 我们的页面是alloc init的,每次创建一个页面,都会请求一次数据
            [_db executeUpdate:@"insert into ProductList (buyurl,contentid,coverimg,title) values(?,?,?,?)",model.buyurl,model.contentid,model.coverimg,model.title];
            
            }

        
#pragma mark ------ 结束刷新
        [_listTableView.mj_header endRefreshing];
        [_listTableView.mj_footer endRefreshing];
        
        // 刷新
        [self.listTableView reloadData];
        
    } error:^(NSError *error) {
        
        NSLog(@"%@",error);
        
    }];
    
    
    
}

// 添加tableVeiw
- (void)addTableview
{
    _listTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 70, kScreenWidth, kScreenHeight - 70) style:(UITableViewStylePlain)];
    _listTableView.delegate = self;
    _listTableView.dataSource = self;
    _listTableView.rowHeight = (kScreenWidth - 40) * 300 / 608 + 50;
    [self.view addSubview:self.listTableView];
    
}

// tableView的协议方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    
    return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    static NSString *identifier = @"MyCell";
    PKProductsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[PKProductsTableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:identifier];
    }
    
    
    // 展示数据
    PKProductModel *model = self.dataArray[indexPath.row];
    cell.productModel = model;
    
    cell.buyButton.tag = indexPath.row + 100;
    
    // 给cell上的按钮添加点击方法
    [cell.buyButton addTarget:self action:@selector(buyAction:) forControlEvents:(UIControlEventTouchUpInside)];
    

    
    
    return cell;
}


// cell点击方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    NSLog(@"lalal");
  
}


- (void)buyAction:(UIButton *)button
{
    NSLog(@"购买");
    
    NSInteger row = button.tag - 100;
    PKProductModel *model = self.dataArray[row];
    // 打开浏览器
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:model.buyurl]];
    
  
    
}





- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
